package com.illtamer.infinite.collapsar.server.smtp;

import com.illtamer.infinite.collapsar.server.handler.AbstractCommandHandler;
import io.netty.channel.Channel;

public class SMTPCommandHandler extends AbstractCommandHandler {

    private final TransferContext context;

    public SMTPCommandHandler(TransferContext context) {
        this.context = context;
    }

    @Override
    public void onCommand(String command, String content, Channel channel) {
        switch (command) {
            case "HELO":
            case "EHLO": {
                context.getEmail().setSender(content);
                // 返回服务器支持的账号校验方式
                channel.writeAndFlush("250-AUTH LOGIN PLAIN XOAUTH XOAUTH2\r\n");
                channel.writeAndFlush("250-AUTH=LOGIN\r\n");
                channel.writeAndFlush("250\r\n");
                break;
            }
            // 登录
            case "AUTH": {
                context.setAuthProcess(true);
                channel.writeAndFlush("334 VXNlcm5hbWU6\r\n");
                break;
            }
            // 邮件发件人
            case "MAIL": {
                context.getConfiguration().clear();
                channel.writeAndFlush("250\r\n");
                break;
            }
            // 邮件接收人
            case "RCPT": {
                channel.writeAndFlush("250\r\n");
                break;
            }
            // 准备接收文件
            case "DATA": {
                context.setFinishData(true);
                channel.writeAndFlush("354\r\n");
                break;
            }
            // 退出
            case "QUIT": {
                channel.writeAndFlush("221\r\n");
                break;
            }
            default: {
                if (context.isAuthProcess()) {
                    context.setPasswordProcess(true);
                    context.setAuthProcess(false);
//                    context.setUsername(message);
                    channel.writeAndFlush("334 UGFzc3dvcmQ6\r\n");
                } else if (context.isPasswordProcess()) {
                    context.setPasswordProcess(false);
//                    context.setPassword(message);
//                    System.out.printf("用户账号： %s，密码：%s%n", context.getUsername(), context.getPassword());

                    // TODO authentication
//                    if ("admin".equals(context.getUsername()) && "123456".equals(context.getPassword()))
//                        channel.writeAndFlush("235\r\n");
//                    else
//                        channel.writeAndFlush("530\r\n");
                } else {
                    channel.writeAndFlush("500\r\n");
                    channel.close();
                }
                break;
            }
        }
    }

}
